﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using AVEIT;
using AVEIT.autogestionAVEIT.Negocio.Gestores;
using AVEIT.autogestionAVEIT.Negocio.Entidades;
using System.Data;


namespace AVEIT.autogestionAVEIT.Presentacion.Navegacion.Cobro
{
    public partial class ABMCliente : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                cargarCombos();
                mostrarListaDeClientes();
            }
        }

        protected void ddlPais_SelectedIndexChanged(object sender, EventArgs e)
        {
            ddlProvincia.DataTextField = "nombre";
            ddlProvincia.DataValueField = "id_provincia";
            ddlProvincia.DataSource = GestorDomicilio.ObtenerProvincias(int.Parse(ddlPais.SelectedValue));
            ddlProvincia.DataBind();
            ddlProvincia.Items.Insert(0, new ListItem("Seleccione una provincia", "0"));
            ddlProvincia.SelectedIndex = 0;  // opcion insertada en la primera posicion
            ddlLocalidad.Items.Clear();
            ddlProvincia.Focus();
        }

        protected void ddlProvincia_SelectedIndexChanged(object sender, EventArgs e)
        {
            ddlLocalidad.DataTextField = "nombre";
            ddlLocalidad.DataValueField = "id_ciudad";
            ddlLocalidad.DataSource = GestorDomicilio.ObtenerLocalidades(int.Parse(ddlProvincia.SelectedValue));
            ddlLocalidad.DataBind();
            ddlLocalidad.Items.Insert(0, new ListItem("Seleccione una localidad", "0"));
            ddlLocalidad.SelectedIndex = 0;  // opcion insertada en la primera posicion
            ddlLocalidad.Focus();
        }

        private void cargarCampos(int idCliente)
        {
            limpiarCampos();
            lblIdCliente.Visible = true;
            txtIdCliente.Visible = true;
            lblIdDomicilio.Visible = true;
            txtIdDomicilio.Visible = true;
            Cliente cli = GestorCliente.obtenerCliente(idCliente);
            txtIdCliente.Text = cli.IdCliente.ToString();
            txtNombre.Text = cli.Nombre;
            txtApellido.Text = cli.Apellido;
            ddlTipoDNI.SelectedIndex = cli.TipoDocumento;
            txtDocumento.Text = cli.NumeroDocumento.ToString();
            if (cli.TipoTelefono.HasValue)
                ddlTipoTelefono.SelectedIndex = int.Parse(cli.TipoTelefono.ToString());
            if (cli.NumeroCaracteristicaTelefono.HasValue)
                txtCaracteristicaTelefono.Text = cli.NumeroCaracteristicaTelefono.ToString();
            if (cli.NumeroTelefono.HasValue)
                txtNumeroTelefono.Text = cli.NumeroTelefono.ToString();
            if (cli.Email!=null)
                txtEmail.Text = cli.Email.ToString();
            if(cli.Sexo.HasValue)
                rblSexo.SelectedValue = cli.Sexo.ToString();
            if (cli.domicilio != null)
            {
                //ddlLocalidad.;
                txtIdDomicilio.Text = cli.domicilio.id_domicilio.ToString();
                txtCalle.Text = cli.domicilio.calle;
                txtNumero.Text = cli.domicilio.numero.ToString();
                if(cli.domicilio.piso.HasValue)
                    txtPiso.Text = cli.domicilio.piso.ToString();
                if(cli.domicilio.departamento!=null)
                    txtDepartamento.Text = cli.domicilio.departamento.ToString();
                if(cli.domicilio.barrio!=null)
                    txtBarrio.Text = cli.domicilio.barrio.ToString();
                if(cli.domicilio.cod_postal.HasValue)
                    txtCodigoPostal.Text = cli.domicilio.cod_postal.ToString();
                //ddlPais.SelectedIndex = 0;
                //ddlProvincia.Items.Clear();
                
            }
        }

        private void limpiarCampos()
        {
            lblIdCliente.Visible = false;
            txtIdCliente.Visible = false;
            lblIdDomicilio.Visible = false;
            txtIdDomicilio.Visible = false;
            txtIdCliente.Text = "";
            txtIdDomicilio.Text = "";
            txtNombre.Text = "";
            txtApellido.Text= "";
            ddlTipoDNI.SelectedIndex = 0;
            txtDocumento.Text = "";
            ddlTipoTelefono.SelectedIndex = 0;
            txtCaracteristicaTelefono.Text = "";
            txtNumeroTelefono.Text = "";
            txtEmail.Text = "";
            rblSexo.SelectedIndex = -1;
            txtCalle.Text = "";
            txtNumero.Text = "";
            txtPiso.Text = "";
            txtDepartamento.Text = "";
            txtBarrio.Text = "";
            txtCodigoPostal.Text = "";
            ddlPais.SelectedIndex = 0;
            ddlProvincia.Items.Clear();
            ddlLocalidad.Items.Clear();
            lblMensajeFooter.Text = "";
            lblMensajeHeader.CssClass = "alert-danger";
            lblMensajeHeader.Text = "";
            GVClientes.SelectedIndex = -1;
        }

        private void mostrarListaDeClientes()
        {
            //obtiene todos los clientes
            List<Cliente> clientes;
            
            try
            {
                clientes = GestorCliente.ObtenerTodos();
                GVClientes.DataSource = clientes;
                GVClientes.DataBind();
            }
            catch (Exception ex)
            {

                lblMensajeHeader.Text=ex.Message;
            }        
        }

        private void cargarCombos()
        {
            ddlPais.DataTextField = "nombre";
            ddlPais.DataValueField = "id_pais";
            ddlPais.DataSource = GestorDomicilio.ObtenerPaises();
            ddlPais.DataBind();
            ddlPais.Items.Insert(0, new ListItem("Seleccione un pais", "0"));
            ddlPais.SelectedIndex = 0;  // opcion insertada en la primera posicion

            ddlTipoDNI.DataTextField = "descripcion";
            ddlTipoDNI.DataValueField = "id_tipoDni";
            ddlTipoDNI.DataSource = GestorTipoDocumento.ObtenerTipoDoc();
            ddlTipoDNI.DataBind();
            ddlTipoDNI.Items.Insert(0, new ListItem("Seleccione un tipo de documento", "0"));
            ddlTipoDNI.SelectedIndex = 0;  // opcion insertada en la primera posicion

            ddlTipoTelefono.DataTextField = "descripcion";
            ddlTipoTelefono.DataValueField = "id_tipoTelefono";
            ddlTipoTelefono.DataSource = GestorCliente.ObtenerTipoTelefono();
            ddlTipoTelefono.DataBind();
            ddlTipoTelefono.Items.Insert(0, new ListItem("Seleccione un tipo de telefono", "0"));
            ddlTipoTelefono.SelectedIndex = 0;  // opcion insertada en la primera posicion
        }

        protected void btn_grabar_Click(object sender, EventArgs e)
        {
            try
            {
                Cliente cli=grabarCliente();
                GestorCliente.GrabarCliente(cli);
                limpiarCampos();
                lblMensajeHeader.Text = "Se grabó el cliente correctamente. ";
                lblMensajeHeader.CssClass = "alert-success";
                panel_cuerpo.Visible = false;
                panel_botones.Visible = true;
                panel_footer.Visible = false;
                panel_grilla.Visible = true;
                mostrarListaDeClientes();
            }
            catch (Exception ex)
            {
                
               lblMensajeFooter.Text = "No se pudo Grabar el cliente. "+ex.Message;
            }
           
        }

        private Cliente grabarCliente()
        {
            Cliente c = new Cliente();
            if (txtIdCliente.Text != "")
                c.IdCliente = int.Parse(txtIdCliente.Text);
            c.Nombre = txtNombre.Text;
            c.Apellido = txtApellido.Text;

            //nuevo Email y nuevo Telefono
            c.Email = txtEmail.Text;
            c.NumeroCaracteristicaTelefono = long.Parse(txtCaracteristicaTelefono.Text);
            c.NumeroTelefono = long.Parse(txtNumeroTelefono.Text);
            c.TipoTelefono = int.Parse(ddlTipoTelefono.SelectedValue);
            c.TipoDocumento = int.Parse(ddlTipoDNI.SelectedValue);
            c.NumeroDocumento = long.Parse(txtDocumento.Text);
            c.Sexo = char.Parse(rblSexo.SelectedValue);
            c.FechaAlta = DateTime.Now.Date;
            c.domicilio = grabarDomicilio();
            return c;
        }
        
        private Domicilio grabarDomicilio()
        {
            Domicilio dom = new Domicilio();
            dom.id_localidad = int.Parse(ddlLocalidad.SelectedValue);
            dom.calle = txtCalle.Text;
            dom.numero = int.Parse(txtNumero.Text);
            dom.piso = int.Parse(txtPiso.Text);
            dom.departamento = txtDepartamento.Text;
            dom.barrio = txtBarrio.Text;
            dom.cod_postal = int.Parse(txtCodigoPostal.Text);
            return dom;
        }

        protected void GVClientes_SelectedIndexChanged(object sender, EventArgs e)
        {
            var id = GVClientes.SelectedValue;
            lblMensajeHeader.Text = "";
        }

        protected void GVClientes_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            GVClientes.PageIndex = e.NewPageIndex;
            mostrarListaDeClientes();
            GVClientes.SelectedIndex = -1;
            limpiarCampos();
        }

        protected void btn_nuevo_Click(object sender, EventArgs e)
        {
            panel_botones.Visible = false;
            panel_cuerpo.Visible = true;
            panel_grilla.Visible = false;
            panel_footer.Visible = true;
            limpiarCampos();
            
        }

        protected void btn_modificar_Click(object sender, EventArgs e)
        {
            if (GVClientes.SelectedRow != null)
            {
                panel_botones.Visible = false;
                panel_cuerpo.Visible = true;
                panel_footer.Visible = true;
                panel_grilla.Visible = false;
                lblIdCliente.Visible = true;
                txtIdCliente.Visible = true;
                cargarCampos(int.Parse(GVClientes.SelectedValue.ToString()));
            }
            else
            {
                panel_botones.Visible = true;
                lblMensajeHeader.CssClass = "alert-danger";
                lblMensajeHeader.Text = "Debe seleccionar un Cliente";
            } 
        }

        protected void btn_eliminar_Click(object sender, EventArgs e)
        {
            if (GVClientes.SelectedRow != null)
            {
                try
                {
                    GestorCliente.EliminarCliente(int.Parse(GVClientes.SelectedValue.ToString()));
                    limpiarCampos();
                    lblMensajeHeader.Text = "Se eliminó el cliente correctamente. ";
                    panel_cuerpo.Visible = false;
                    panel_botones.Visible = true;
                    panel_footer.Visible = false;
                    panel_grilla.Visible = true;
                    mostrarListaDeClientes();
                }
                catch (Exception ex)
                {
                    lblMensajeHeader.CssClass = "alert-danger";
                    lblMensajeHeader.Text = "No se pudo eliminar el cliente. "+ ex.Message;
                }

            }
            else
            {
                panel_botones.Visible = true;
                lblMensajeHeader.Text = "Debe seleccionar un Cliente";
                lblMensajeHeader.CssClass = "alert-danger";
            }
        }
        protected void btn_cancelar_Click(object sender, EventArgs e)
        {
            panel_botones.Visible = true;
            panel_cuerpo.Visible = false;
            panel_footer.Visible = false;
            panel_grilla.Visible = true;
            limpiarCampos();
        }
    }
}